package com.ftx.controller.RuleEngine.Drools;

import com.ftx.domain.vo.PersonVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Created by fengtingxin on 2019/10/23.
 * Drools就是为了解决业务代码和业务规则分离的引擎。
 * Drools 规则是在 Java 应用程序上运行的，其要执行的步骤顺序由代码确定
 * ，为了实现这一点，Drools 规则引擎将业务规则转换成执行树。
 *
 * 优点：
 * 　　　1、简化系统架构，优化应用
 * 　　　2、提高系统的可维护性和维护成本
 * 　　　3、方便系统的整合
 * 　　　4、减少编写“硬代码”业务规则的成本和风险
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring-config.xml"})
public class AgeDroolsTest {

    private static KieContainer container = null;
    private KieSession statefulKieSession = null;

    @Test
    public void test() {
        container = KieServices.Factory.get().getKieClasspathContainer("testAge");
        statefulKieSession = container.newKieSession("testAgeKieSession");
        PersonVo user = new PersonVo("duval yang",12);
        statefulKieSession.insert(user);
        statefulKieSession.fireAllRules();
        statefulKieSession.dispose();
    }
}
